//
const { reject } = require('lodash')
const MyPromise = require('./myPromise')

let promise = new MyPromise((resolve,reject)=>{
    // resolve('success')
    reject('error')
    // throw new Error('executor is error')

    /** 异步逻辑 */
    // setTimeout(()=>{
    //     resolve('setTimeout success')
    // },3000)
});

const timeOut = function (params) {
    return new MyPromise((resolve,reject)=>{
        setTimeout(() => {
            resolve('timeOut is success')
        }, 1000);
    })
}

function normalSuccessPromise() {
    return new MyPromise((resolve,reject)=>{
        resolve('normalSuccessPromise success')
    })
}

function normalFailPromise() {
    return new MyPromise((resolve,reject)=>{
        reject('normalFailPromise fail')
        
    })
}

const timeOut2  = function (params) {
    return new MyPromise((resolve,reject)=>{
        setTimeout(() => {
            resolve('timeOut2 is success')
        }, 0);
    })
}

/** 实现Promise.reject */
MyPromise.reject('fail').then(res=>{}).catch(err=>{
    console.log(err);
})

/** 实现Promise.race方法 */
// MyPromise.race([timeOut(),timeOut2()]).then(res=>{console.log(res);},err=>{
//     console.log('err:',err);
// })

/** 实现catch方法 */
// promise.then(res=>{
//     console.log('res',res);
// }).catch(err=>{
//     console.log(err);
// })

/** 实现finally方法*/
// promise.finally(res=>{
//     console.log('finally:',res);
//     return normalFailPromise()
// }).then(res=>{
//     console.log('then',res);
// },err=>{
//     console.log(err);
// })

/** 实现Promise.resolve */
// MyPromise.resolve(10).then(res=>{console.log('resolve',res);})
// MyPromise.resolve(normalFailPromise()).then(res=>{console.log('normalFailPromise',res);},err=>{console.log('normalFailPromise err:',err);})
// MyPromise.resolve(normalSuccessPromise()).then(res=>{console.log('normalSuccessPromise',res);},err=>{console.log('normalSuccessPromise err:',err);})


/** 实现Promise.all */
// MyPromise.all([10,normalFailPromise(),timeOut(),normalSuccessPromise()]).then(res=>{
//     console.log('all',res);
// },err=>{
//     console.log('all err:',err);
// })

/** 实现then方法参数变成可选 */
// promise.then().then(res=>{
//     console.log(res);
// },err=>{
//     console.log(err);
// })

/** 实现捕获promise loop */
// const p1 = promise.then(res=>{
//     return p1
// })
// p1.then(res=>{
//     console.log(res)
// },err=>{
//     console.log(err);
// })

/** test4: then链式调用  */
// promise.then(res=>{
//     console.log(' then1 res:',res) // success
//     return 10
// }).then(res=>{
//     console.log(' then2 res',res)
//     return normalSuccessPromise()
// }).then(res=>{
//     console.log(' then3 res',res)
//     return normalFailPromise()
// }).then(res=>{
//     console.log(' then4 res',res)
// },err=>{
//     console.log(' then4 err',err)
// })

/** test3: then方法多次调用  */
// promise.then(res=>{
//     console.log('test3 res:',res) // success
// })
// promise.then(res=>{
//     console.log('test3 res:',res) // success
// })
// promise.then(res=>{
//     console.log('test3 res:',res) // success
// })

/** test2: promise中加入异步逻辑 */
// promise.then(res=>{
//     console.log('test2 res:',res) // setTimeout success
// })

/** test1: 实现promise的基础调用 */
// promise.then(res=>{
//     console.log('test1 res:',res) // success
// },err=>{
//     console.log('test1 err:',err) // error || Error: executor is error
// })